import numpy as np
import matplotlib.pyplot as plt

# -----  生成的曲线 ------------
x = np.linspace(0, 1, 20)
y = np.sin(2 * x)
plt.plot(x, y, 'ro')
# ------ 预测线 -------------------
w = 2
b = 0.1
predict_y = w * x + b
line, = plt.plot(x, predict_y, 'b--')
# ------ 将预测线动态显示-----------
for i in range(1000):
    predict_y = w * x + b
    # --------- 斜率x小固定值， SGD梯度下降法（随机梯度下降法）
    w -= np.mean(-2 * x * (y - predict_y)) * 0.05
    b -= np.mean(-2 * (y - predict_y)) * 0.05
    line.set_data(x, predict_y)
    plt.pause(0.5)
    # ------ 计算损失率（计算与真实结果之间的差距）---
    # ------ loss 越小越好 ----------------------
    loss = np.mean((y - predict_y) ** 2)
    print(f"loss:{loss:.4f}")  # 保留4位小数
